Auteur : Pablo Iriarte, UNIGE - pablo.iriarte@unige.ch
Date : 10.03.2020
Ce notebook est dédié à l'analyse des statistiques des bibliothèques de l'Office fédéral de la statistique (OFS) utilisés dans l'article du même titre proposé à la revue de l'association BiblioSuisse (https://bibliosuisse.ch/). L'article traite des dépenses, de l'offre et de l'usage des ressoruces numériques des bibliothèques suisses. Il compléte celui centré sur les aspects qualitatifs qui est préparé en parallèle par Aurélie vieux.
L'analyse se base sur les 7 catégories de bibliothèques créés par l'OFS :
1Les bibliothèques publiques communales et mixtes se limitent à certains cantons partenaires de l'OFS (8 cantons de 2008 à 2010, 10 en 2011, 11 en 2012 et 2013, 12 de 2014 à 2016 et 13 en 2017 et 2018), à terme la participation de l'ensemble des cantons est visée par l'OFS.
Sources des données :
Page sur l'offre des ressources en bibliothèque et comparaison print/électronique : https://www.bfs.admin.ch/bfs/fr/home/statistiques/culture-medias-societe-information-sport/culture/bibliotheques.html
OFS "E-ressources des bibliothèques" (période 2004-2018) : https://www.bfs.admin.ch/bfs/fr/home/statistiques/culture-medias-societe-information-sport/culture/bibliotheques.assetdetail.9207138.html (fichier Excel : https://www.bfs.admin.ch/bfsstatic/dam/assets/9207138/master)
Bibliothèques universitaires (période 2003-2018) : https://www.bfs.admin.ch/bfs/fr/home/statistiques/culture-medias-societe-information-sport/culture/bibliotheques.assetdetail.9186561.html (Fichier Excel su-f-16.02.02.02.xlsx : https://www.bfs.admin.ch/bfsstatic/dam/assets/9186561/master )
Réseaux de bibliothèques des universités (période 2003-2018) : https://www.bfs.admin.ch/bfs/fr/home/statistiques/culture-medias-societe-information-sport/culture/bibliotheques.assetdetail.9186559.html (fichier Excel : https://www.bfs.admin.ch/bfsstatic/dam/assets/9186559/master )
Bibliothèques des hautes écoles pédagogiques (période 2013-2018) : https://www.bfs.admin.ch/bfs/fr/home/statistiques/culture-medias-societe-information-sport/culture/bibliotheques.assetdetail.9186572.html (Fichier Excel : https://www.bfs.admin.ch/bfsstatic/dam/assets/9186572/master )
Réseaux de bibliothèques des hautes écoles spécialisées (période 2003-2018) : https://www.bfs.admin.ch/bfs/fr/home/statistiques/culture-medias-societe-information-sport/culture/bibliotheques.assetdetail.9186562.html (fichier Excel : https://www.bfs.admin.ch/bfsstatic/dam/assets/9186562/master )
Bibliothèques publiques des villes (communes dès 10'000 habitants) (période 2003-2018) : https://www.bfs.admin.ch/bfs/fr/home/statistiques/culture-medias-societe-information-sport/culture/bibliotheques.assetdetail.9186563.html (Fichier Excel : https://www.bfs.admin.ch/bfsstatic/dam/assets/9186563/master )
Bibliothèques publiques communales et mixtes (communales et scolaires) des communes en dessous de 10'000 habitants (période 2008-2018) : https://www.bfs.admin.ch/bfs/fr/home/statistiques/culture-medias-societe-information-sport/culture/bibliotheques.assetdetail.9186571.html (fichier Excel : https://www.bfs.admin.ch/bfsstatic/dam/assets/9186571/master )
Bibliothèques à vocation nationale (période 2003-2018) : https://www.bfs.admin.ch/bfs/fr/home/statistiques/culture-medias-societe-information-sport/culture/bibliotheques.assetdetail.9186558.html (fichier excel : https://www.bfs.admin.ch/bfsstatic/dam/assets/9186558/master )
Définitions des variables: questionnaire long, questions complémentaires et benchmarking : https://www.bfs.admin.ch/bfs/fr/home/statistiques/culture-medias-societe-information-sport/culture/bibliotheques.assetdetail.11807727.html
Elèves et étudiants selon le degré et le type de formation, évolution (période 1999-2019) : https://www.bfs.admin.ch/bfs/fr/home/statistiques/education-science/personnes-formation.assetdetail.11787925.html (fichier excel : https://www.bfs.admin.ch/bfsstatic/dam/assets/11787925/master )
Bilan de la population résidante permanente par canton, 1991-2018 : https://www.bfs.admin.ch/bfs/fr/home/statistiques/population/effectif-evolution/repartition-territoriale.assetdetail.9486040.html (fichier excel : https://www.bfs.admin.ch/bfsstatic/dam/assets/9486040/master )
E31 Frais d'acquisition de documents (part de E28, arrondis au franc) Frais d'acquisition de documents sur support électronique ou non, exceptés les frais externes d'équipement et de reliure.
E32
→ dont frais d'acquisition de documents sur support électronique (part de E31, arrondis au franc)
Frais d'acquisition de documents sur support électroniques (journaux et périodiques électroniques, bases de données, EBooks, documents audiovisuels digitaux, documents numériques individuels ; définitions voir F45 à F47d), y compris fichiers électroniques (notices de catalogage entre autres).
F37 Offre totale (total de F38 à F44 sans F39a, nombre d'unités physiques) Total des documents (unités physiques) de la bibliothèque (total de F38 à F44 – sans F39a)
F45
Journaux et périodiques électroniques disponibles en ligne (nombre de titres)
Journaux et périodiques courants sous forme électronique. Consultables en texte intégral avec licence ou gratuitement en ligne si rendus disponibles par la bibliothèque (i.e. inscrits au catalogue). Est déterminante l’offre électronique concrète pour l’usager depuis la bibliothèque, indépendamment de acquis la licence de l’offre (communautés d’achat comme Consortium ou réseaux d’une part, bibliothèques locales de l’autre).
F47a
Bases de données disponibles en ligne (nombre de titres)
Collections de données sous forme électronique (texte intégral, bibliographies ou autres) accompagnées d'un logiciel de recherche. Seules les bases de données au bénéfice d'une licence d'utilisation sont comptées.
Est déterminante l’offre électronique concrète pour l’usager depuis la bibliothèque, indépendamment de acquis la licence de l’offre (communautés d’achat comme Consortium ou réseaux d’une part, bibliothèques locales de l’autre). Les sous-banques de données ou banques de données partielles qui font partie d’une base de données supérieure ne sont pas comptées séparément.
F47b
Ebooks disponibles en ligne (nombre de titres)
Ebooks : livres électroniques acquis sous licence ou par achat, en libre accès ou numérisés par la bibliothèque si rendu disponibles par la bibliothèque (i.e. inscrits au catalogue). Est déterminante l’offre électronique concrète pour l’usager depuis la bibliothèque, indépendamment de acquis la licence de l’offre (communautés d’achat comme Consortium ou réseaux d’une part, bibliothèques locales de l’autre).
Sont compris : les documents électroniques des hautes écoles (thèses, mémoires). Les autres travaux de qualification (travaux de master etc.) sont aussi comptés s’ils remplissent ces critères.
Sont exclus : les revues et journaux courants, les médias numériques AV et les documents numériques individuels.
F47c
Documents audiovisuels digitaux disponibles en ligne (nombre de titres)
Documents audiovisuels digitaux acquis sous licence ou par achat, en libre accès et rendu disponible par la bibliothèque (i.e. inscrits au catalogue). Est déterminante l’offre électronique concrète pour l’usager depuis la bibliothèque, indépendamment de acquis la licence de l’offre (communautés d’achat comme Consortium ou réseaux d’une part, bibliothèques locales de l’autre).
F47d
Documents numériques individuels disponibles en ligne (nombre de titres)
Autres documents numériques individuels (manuscrits numérisés, articles isolés de journaux/périodiques, documents cartographiques, notes, documents iconographiques, etc.).
Sont exclus : les revues et journaux électroniques courants, les livres électroniques, les médias AV numériques.
G59 Total prêts (nombre de prêts enregistrés ou de bulletins de prêt délivrés) Prêts établis sur la base du système informatique ou par comptage manuel, y compris les prêts en salle de lecture, par envoi direct, les prêts entre bibliothèques (envoyés et reçus), les prolongations. Seules les prolongations effectuées par les utilisateurs eux-mêmes ou par le personnel sont considérées comme des prolongations. Les prolongations automatiques effectuées par le système informatique sans l'intervention de l'utilisateur ou du personnel ne sont pas prises en compte. Les prêts renouvelés (nouvelle transaction enregistrée dans le système) après un délai de prêt écoulé comptent comme de nouveaux prêts. Sont exclus : reproductions d'articles de périodiques, de monographies, de recueils de mélanges etc., prêts pour utilisation par la bibliothèque, documents utilisés provenant de collections spéciales.
G62 Articles (nombre de demandes satisfaites) Nombre total des demandes d'articles de périodiques, de monographies, de recueils de mélanges, etc. satisfaites (recherche, établissement d'une copie, envoi), indépendamment de la procédure de commande (prêt entre bibliothèques, commande directe auprès de la bibliothèque) ou du mode de livraison (copies papier ou électronique).
G63 Total utilisation de documents spéciaux ou précieux (total de G64 à G67, nombre d'unités utilisées) Nombre total de documents spéciaux ou précieux consultés sur place et sous surveillance. Mode de comptage : a) par unités d'archivage utilisées (boîtes, p. ex.), lorsqu'elles sont remises pour examen en tant que telles aux utilisateurs ; b) par unités physiques remises aux utilisateurs par le personnel.
G68 Nombre de reproductions effectuées Documents de substitution réalisés à partir d'un original a) pour autant qu'ils soient réalisés ou fournis par le personnel de la bibliothèque à la demande de l’utilisateur ; b) pour autant qu'ils remplissent un but de préservation des biens culturels. Sont exclus : les reproductions produites par l'utilisateur même, les copies ou scannings d'articles de magazine pour l'envoi direct (à reporter sous G62). Mode de comptage précis :
G71a
Bases de données (nombre de fichiers de données consultés)
Bases de données disponibles en ligne. Nombre de fichiers de données effectivement consultés, sélectionnés à partir du résultat d'une recherche dans une base de données. Comptage standardisé par Counter Release version 4 ou plus récent (record views), si disponible.
G71b
Ebooks (nombre de téléchargements)
Ebooks disponibles en ligne (définition voir F47b).
Téléchargements : réception réussie (sur le disque dur ou aussi seulement à l’écran), sous forme de fichier, d'un document électronique (ou d'un extrait de document) provenant d'un service en ligne ou d'un service internet proposé par la bibliothèque. Comptage standardisé par Counter Release version 4 ou plus récent, si disponible (sinon, autre comptage automatique). Y compris : utilisation de livres électroniques comme prêt virtuel.
G71c
Documents audiovisuels digitaux (nombre d’accès via téléchargement ou en streaming)
Documents audiovisuels digitaux disponibles en ligne (définition voir F47c).
Téléchargement ou en streaming : réception réussie (sur le disque dur ou aussi seulement à l’écran), sous forme de fichier, d'un document électronique (ou d'un extrait de document) provenant d'un service en ligne ou d'un service internet proposé par la bibliothèque. Y compris : utilisation comme prêt virtuel.
G72a
Journaux/périodiques électroniques (nombre de téléchargements)
Journaux/périodiques courants sous forme électronique accessible en ligne (définition voir F45).
Téléchargements : réception réussie (sur le disque dur ou aussi seulement à l’écran), sous forme de fichier, d'articles de revues électroniques provenant d'un service en ligne ou d'un service internet proposé par la bibliothèque. Comptage standardisé par compteur si disponible.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter
import matplotlib as mpl
import sys
%matplotlib inline
# URLs des données OFS (fichiers excel)
url_ofs_unis = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186561/master')
url_ofs_unis_reseaux = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186559/master')
url_ofs_hes = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186562/master')
url_ofs_hep = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186572/master')
url_ofs_bn = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186558/master')
url_ofs_villes = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186563/master')
url_ofs_communes = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9186571/master')
url_ofs_population = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/9486040/master')
url_ofs_etudiants = ('https://www.bfs.admin.ch/bfsstatic/dam/assets/11787925/master')
Période d'observation : 2003-2018
# fichier OFS pour les bibliothèques universitaires : totaux, moyennes et réponses
# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2003,2019))
lignes = {2003 : 18, 2004 : 18, 2005 : 18, 2006 : 17, 2007 : 17, 2008 : 18, 2009 : 18, 2010 : 18,
2011 : 18, 2012 : 18, 2013 : 18, 2014 : 18, 2015 : 18, 2016 : 18, 2017 : 19, 2018 : 19}
# initialiser les 3 dataframes
df_unis = pd.DataFrame()
df_unis_moyennes = pd.DataFrame()
df_unis_reponses = pd.DataFrame()
# boucle de calculs pour chaque onglet annuel
for year in years:
# les lignes à ignorer changent en 2015
if year > 2015:
df_unis_year = pd.read_excel(url_ofs_unis, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=4, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_unis_year = df_unis_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
else:
df_unis_year = pd.read_excel(url_ofs_unis, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=3, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_unis_year = df_unis_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
# supprimer les 4 premières lignes
df_unis_year = df_unis_year.iloc[4:,:]
# garder les lignes avec code sur la première colonne
count_year = df_unis_year['Unnamed: 0'].count()
df_unis_year = df_unis_year.loc[df_unis_year['Unnamed: 0'].notnull()]
# supprimer les 3 premières colonnes
df_unis_year = df_unis_year.iloc[:,3:]
# remplacer ... par NaN
df_unis_year = df_unis_year.replace('...', np.nan)
df_unis_year = df_unis_year.replace('…', np.nan)
# Nettoyage des scories
# valeur en 2005 G70 : "568 045"
df_unis_year = df_unis_year.replace('568[^0-9]+045', 568045, regex=True)
# remplacer valeurs vides contenant " " ou "0 " ou " " ou ". " ou "."
df_unis_year = df_unis_year.replace('0 ', 0)
df_unis_year = df_unis_year.replace('. ', np.nan)
df_unis_year = df_unis_year.replace('.', np.nan)
df_unis_year = df_unis_year.replace(' ', np.nan)
df_unis_year = df_unis_year.replace(' ', np.nan)
# calcul des totaux, moyennes et nombre de réponses
df_unis_year_tot = df_unis_year.sum()
df_unis_year_mean = df_unis_year.mean()
df_unis_year_reponses = df_unis_year.count()
# ajouer l'année
df_unis_year_tot['Année'] = year
df_unis_year_mean['Année'] = year
df_unis_year_reponses['Année'] = year
# calcul du nombre de lignes
df_unis_year_tot['NBIB'] = count_year
df_unis_year_mean['NBIB'] = count_year
df_unis_year_reponses['NBIB'] = count_year
# ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et le nombre de réponses
df_unis = df_unis.append(df_unis_year_tot, ignore_index=True)
df_unis_moyennes = df_unis_moyennes.append(df_unis_year_mean, ignore_index=True)
df_unis_reponses = df_unis_reponses.append(df_unis_year_reponses, ignore_index=True)
# test des champs pour traquer les erreurs et ajouter des remplacements ci-dessus
for champ in df_unis_year.columns:
if (df_unis_year.dtypes[champ] == 'object'):
print (' ERROR IN ' + str(year) + ' ' + champ)
print (df_unis_year[champ])
# convertir l'année en entiers et ajouter l'index sur l'année
df_unis['Année'] = df_unis['Année'].astype(int)
df_unis_moyennes['Année'] = df_unis_moyennes['Année'].astype(int)
df_unis_reponses['Année'] = df_unis_reponses['Année'].astype(int)
df_unis = df_unis.set_index('Année')
df_unis_moyennes = df_unis_moyennes.set_index('Année')
df_unis_reponses = df_unis_reponses.set_index('Année')
df_unis_reponses = df_unis_reponses.fillna(0)
df_unis
df_unis_moyennes
df_unis_reponses
# afficher le nom des colonnes pour tester si tout est OK
df_unis.columns
Période d'observation : 2003-2018
# fichier OFS pour les réseaux de bibliothèques des universités : totaux, moyennes et réponses
# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2003,2019))
lignes = {2003 : 244, 2004 : 254, 2005 : 252, 2006 : 218, 2007 : 221, 2008 : 165, 2009 : 157, 2010 : 128,
2011 : 121, 2012 : 113, 2013 : 113, 2014 : 108, 2015 : 100, 2016 : 90, 2017 : 79, 2018 : 76}
# initialiser les 3 dataframes
df_unis_reseaux = pd.DataFrame()
df_unis_reseaux_moyennes = pd.DataFrame()
df_unis_reseaux_reponses = pd.DataFrame()
# boucle de calculs pour chaque onglet annuel
for year in years:
# les lignes à ignorer changent en 2015
if year > 2015:
df_unis_reseaux_year = pd.read_excel(url_ofs_unis_reseaux, header=0,
encoding=sys.getfilesystemencoding(), sheet_name=str(year),
skiprows=4, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_unis_reseaux_year = df_unis_reseaux_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
else:
df_unis_reseaux_year = pd.read_excel(url_ofs_unis_reseaux, header=0,
encoding=sys.getfilesystemencoding(), sheet_name=str(year),
skiprows=3, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_unis_reseaux_year = df_unis_reseaux_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
# supprimer les 4 premières lignes
df_unis_reseaux_year = df_unis_reseaux_year.iloc[4:,:]
# garder les lignes avec code sur la première colonne
count_year = df_unis_reseaux_year['Unnamed: 0'].count()
df_unis_reseaux_year = df_unis_reseaux_year.loc[df_unis_reseaux_year['Unnamed: 0'].notnull()]
# supprimer les 3 premières colonnes
df_unis_reseaux_year = df_unis_reseaux_year.iloc[:,3:]
# remplacer ... par NaN
df_unis_reseaux_year = df_unis_reseaux_year.replace('...', np.nan)
df_unis_reseaux_year = df_unis_reseaux_year.replace('…', np.nan)
# Nettoyage des scories
# remplacer valeurs vides contenant " " ou "0 " ou " " ou ". " ou "."
df_unis_reseaux_year = df_unis_reseaux_year.replace('0 ', 0)
df_unis_reseaux_year = df_unis_reseaux_year.replace('..', np.nan)
df_unis_reseaux_year = df_unis_reseaux_year.replace('.', np.nan)
df_unis_reseaux_year = df_unis_reseaux_year.replace(' ', np.nan)
df_unis_reseaux_year = df_unis_reseaux_year.replace(' [^0-9]+', np.nan, regex=True)
df_unis_reseaux_year = df_unis_reseaux_year.replace(' ', np.nan)
df_unis_reseaux_year = df_unis_reseaux_year.replace('o', 0)
df_unis_reseaux_year = df_unis_reseaux_year.replace(',', np.nan)
# convertir le reste en nombres
# for champ in df_unis_reseaux_year.columns:
# df_unis_reseaux_year[champ] = pd.to_numeric(df_unis_reseaux_year[champ])
# calcul des totaux, moyennes et nombre de réponses
df_unis_reseaux_year_tot = df_unis_reseaux_year.sum()
df_unis_reseaux_year_mean = df_unis_reseaux_year.mean()
df_unis_reseaux_year_reponses = df_unis_reseaux_year.count()
# ajouer l'année
df_unis_reseaux_year_tot['Année'] = year
df_unis_reseaux_year_mean['Année'] = year
df_unis_reseaux_year_reponses['Année'] = year
# calcul du nombre de lignes
df_unis_reseaux_year_tot['NBIB'] = count_year
df_unis_reseaux_year_mean['NBIB'] = count_year
df_unis_reseaux_year_reponses['NBIB'] = count_year
# ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et le nombre de réponses
df_unis_reseaux = df_unis_reseaux.append(df_unis_reseaux_year_tot, ignore_index=True)
df_unis_reseaux_moyennes = df_unis_reseaux_moyennes.append(df_unis_reseaux_year_mean, ignore_index=True)
df_unis_reseaux_reponses = df_unis_reseaux_reponses.append(df_unis_reseaux_year_reponses, ignore_index=True)
# test des champs pour traquer les erreurs et ajouter des remplacements ci-dessus
for champ in df_unis_reseaux_year.columns:
if (df_unis_reseaux_year.dtypes[champ] == 'object'):
print (' ERROR IN ' + str(year) + ' ' + champ)
print (df_unis_reseaux_year[champ])
# convertir l'année en entiers et ajouter l'index sur l'année
df_unis_reseaux['Année'] = df_unis_reseaux['Année'].astype(int)
df_unis_reseaux_moyennes['Année'] = df_unis_reseaux_moyennes['Année'].astype(int)
df_unis_reseaux_reponses['Année'] = df_unis_reseaux_reponses['Année'].astype(int)
df_unis_reseaux = df_unis_reseaux.set_index('Année')
df_unis_reseaux_moyennes = df_unis_reseaux_moyennes.set_index('Année')
df_unis_reseaux_reponses = df_unis_reseaux_reponses.set_index('Année')
df_unis_reseaux_reponses = df_unis_reseaux_reponses.fillna(0)
df_unis_reseaux
df_unis_reseaux_moyennes
df_unis_reseaux_reponses
# afficher le nom des colonnes pour tester si tout est OK
df_unis_reseaux.columns
Période d'observation : 2003-2018
# fichier OFS pour les HES : totaux, moyennes et réponses
# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2003,2019))
lignes = {2003 : 23, 2004 : 23, 2005 : 66, 2006 : 88, 2007 : 90, 2008 : 87, 2009 : 87, 2010 : 96,
2011 : 90, 2012 : 94, 2013 : 89, 2014 : 91, 2015 : 93, 2016 : 92, 2017 : 94, 2018 : 87}
# initialiser les 3 dataframes
df_hes = pd.DataFrame()
df_hes_moyennes = pd.DataFrame()
df_hes_reponses = pd.DataFrame()
# boucle de calculs pour chaque onglet annuel
for year in years:
# les lignes à ignorer changent en 2015
if year > 2015:
df_hes_year = pd.read_excel(url_ofs_hes, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=4, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_hes_year = df_hes_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
else:
df_hes_year = pd.read_excel(url_ofs_hes, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=3, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_hes_year = df_hes_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
# supprimer les 4 premières lignes
df_hes_year = df_hes_year.iloc[4:,:]
# garder les lignes avec code sur la première colonne
count_year = df_hes_year['Unnamed: 0'].count()
df_hes_year = df_hes_year.loc[df_hes_year['Unnamed: 0'].notnull()]
# supprimer les 3 premières colonnes
df_hes_year = df_hes_year.iloc[:,3:]
# remplacer ... par NaN
df_hes_year = df_hes_year.replace('...', np.nan)
df_hes_year = df_hes_year.replace('…', np.nan)
# corrections des scories
# remplacer les valeurs qui ont du texte en 2016 : 7'621’644 ; 5'560’227 ; 2'061’417
# et 2015 : 7’365’794 ; 5'200’311 ; 2'165’483
df_hes_year = df_hes_year.replace('7\'621’644', 7621644)
df_hes_year = df_hes_year.replace('5\'560’227', 5560227)
df_hes_year = df_hes_year.replace('2\'061’417', 2061417)
df_hes_year = df_hes_year.replace('7’365’794[^0-9]+', 7365794, regex=True)
df_hes_year = df_hes_year.replace('5\'200’311', 5200311)
df_hes_year = df_hes_year.replace('2\'165’483', 2165483)
# remplacer valeurs vides contenant " " ou "0 " ou " " ou ". " ou "."
df_hes_year = df_hes_year.replace('0 ', 0)
df_hes_year = df_hes_year.replace('. ', np.nan)
df_hes_year = df_hes_year.replace('.', np.nan)
df_hes_year = df_hes_year.replace(' ', np.nan)
df_hes_year = df_hes_year.replace(' ', np.nan)
# calcul des totaux, moyennes et réponses
df_hes_year_tot = df_hes_year.sum()
df_hes_year_mean = df_hes_year.mean()
df_hes_year_reponses = df_hes_year.count()
# ajouer l'année
df_hes_year_tot['Année'] = year
df_hes_year_mean['Année'] = year
df_hes_year_reponses['Année'] = year
# calcul du nombre de lignes
df_hes_year_tot['NBIB'] = count_year
df_hes_year_mean['NBIB'] = count_year
df_hes_year_reponses['NBIB'] = count_year
# ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et le nombre de réponses
df_hes = df_hes.append(df_hes_year_tot, ignore_index=True)
df_hes_moyennes = df_hes_moyennes.append(df_hes_year_mean, ignore_index=True)
df_hes_reponses = df_hes_reponses.append(df_hes_year_reponses, ignore_index=True)
# test des champs
for champ in df_hes_year.columns:
if (df_hes_year.dtypes[champ] == 'object'):
print (' ERROR IN ' + str(year) + ' ' + champ)
print (df_hes_year[champ])
# convertir l'année en entiers et ajouter l'index sur l'année
df_hes['Année'] = df_hes['Année'].astype(int)
df_hes_moyennes['Année'] = df_hes_moyennes['Année'].astype(int)
df_hes_reponses['Année'] = df_hes_reponses['Année'].astype(int)
df_hes = df_hes.set_index('Année')
df_hes_moyennes = df_hes_moyennes.set_index('Année')
df_hes_reponses = df_hes_reponses.set_index('Année')
df_hes_reponses = df_hes_reponses.fillna(0)
df_hes
df_hes_moyennes
df_hes_reponses
# afficher le nom des colonnes pour tester si tout est OK
df_hes.columns
Période d'observation : 2013-2018
# fichier OFS pour les HEP : totaux, moyennes et réponses
# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2013,2019))
lignes = {2013 : 14, 2014 : 12, 2015 : 13, 2016 : 13, 2017 : 13, 2018 : 13}
# initialiser les 3 dataframes
df_hep = pd.DataFrame()
df_hep_moyennes = pd.DataFrame()
df_hep_reponses = pd.DataFrame()
# boucle de calculs pour chaque onglet annuel
for year in years:
# les lignes à ignorer changent en 2015
if year > 2015:
df_hep_year = pd.read_excel(url_ofs_hep, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=4, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_hep_year = df_hep_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
else:
df_hep_year = pd.read_excel(url_ofs_hep, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=3, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_hep_year = df_hep_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
# supprimer les 4 premières lignes
df_hep_year = df_hep_year.iloc[4:,:]
# garder les lignes avec code sur la première colonne
count_year = df_hep_year['Unnamed: 0'].count()
df_hep_year = df_hep_year.loc[df_hep_year['Unnamed: 0'].notnull()]
# supprimer les 3 premières colonnes
df_hep_year = df_hep_year.iloc[:,3:]
# remplacer ... par NaN
df_hep_year = df_hep_year.replace('...', np.nan)
df_hep_year = df_hep_year.replace('…', np.nan)
# corrections des scories
# remplacer valeurs vides contenant " " ou "0 " ou " " ou ". " ou "."
df_hep_year = df_hep_year.replace('0 ', 0)
df_hep_year = df_hep_year.replace('. ', np.nan)
df_hep_year = df_hep_year.replace('.', np.nan)
df_hep_year = df_hep_year.replace(' ', np.nan)
df_hep_year = df_hep_year.replace(' ', np.nan)
# calcul des totaux, moyennes et réoponses
df_hep_year_tot = df_hep_year.sum()
df_hep_year_mean = df_hep_year.mean()
df_hep_year_reponses = df_hep_year.count()
# ajouer l'année
df_hep_year_tot['Année'] = year
df_hep_year_mean['Année'] = year
df_hep_year_reponses['Année'] = year
# calcul du nombre de lignes
df_hep_year_tot['NBIB'] = count_year
df_hep_year_mean['NBIB'] = count_year
df_hep_year_reponses['NBIB'] = count_year
# ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et les réoponses
df_hep = df_hep.append(df_hep_year_tot, ignore_index=True)
df_hep_moyennes = df_hep_moyennes.append(df_hep_year_mean, ignore_index=True)
df_hep_reponses = df_hep_reponses.append(df_hep_year_reponses, ignore_index=True)
# test des champs
for champ in df_hep_year.columns:
if (df_hep_year.dtypes[champ] == 'object'):
print (' ERROR IN ' + str(year) + ' ' + champ)
print (df_hep_year[champ])
# convertir l'année en entiers et ajouter l'index sur l'année
df_hep['Année'] = df_hep['Année'].astype(int)
df_hep_moyennes['Année'] = df_hep_moyennes['Année'].astype(int)
df_hep_reponses['Année'] = df_hep_reponses['Année'].astype(int)
df_hep = df_hep.set_index('Année')
df_hep_moyennes = df_hep_moyennes.set_index('Année')
df_hep_reponses = df_hep_reponses.set_index('Année')
df_hep_reponses = df_hep_reponses.fillna(0)
# ajouter les années manquantes
df_hep.loc[2003] = np.nan
df_hep.loc[2004] = np.nan
df_hep.loc[2005] = np.nan
df_hep.loc[2006] = np.nan
df_hep.loc[2007] = np.nan
df_hep.loc[2008] = np.nan
df_hep.loc[2009] = np.nan
df_hep.loc[2010] = np.nan
df_hep.loc[2011] = np.nan
df_hep.loc[2012] = np.nan
df_hep_moyennes.loc[2003] = np.nan
df_hep_moyennes.loc[2004] = np.nan
df_hep_moyennes.loc[2005] = np.nan
df_hep_moyennes.loc[2006] = np.nan
df_hep_moyennes.loc[2007] = np.nan
df_hep_moyennes.loc[2008] = np.nan
df_hep_moyennes.loc[2009] = np.nan
df_hep_moyennes.loc[2010] = np.nan
df_hep_moyennes.loc[2011] = np.nan
df_hep_moyennes.loc[2012] = np.nan
df_hep_reponses.loc[2003] = np.nan
df_hep_reponses.loc[2004] = np.nan
df_hep_reponses.loc[2005] = np.nan
df_hep_reponses.loc[2006] = np.nan
df_hep_reponses.loc[2007] = np.nan
df_hep_reponses.loc[2008] = np.nan
df_hep_reponses.loc[2009] = np.nan
df_hep_reponses.loc[2010] = np.nan
df_hep_reponses.loc[2011] = np.nan
df_hep_reponses.loc[2012] = np.nan
df_hep
df_hep_moyennes
df_hep_reponses
# afficher le nom des colonnes pour tester si tout est OK
df_hep.columns
Période d'observation : 2003-2018
# fichier OFS pour la BN : totaux, moyenne (= total) et réponses
# liste d'onglets à lire sur Excel
years = list(range(2003,2019))
# initialiser les 2 dataframes (les moyennes sont égales aux totaux)
df_bn = pd.DataFrame()
df_bn_reponses = pd.DataFrame()
# boucle de calculs pour chaque onglet annuel
for year in years:
# les lignes à ignorer changent en 2015
if year > 2015:
df_bn_year = pd.read_excel(url_ofs_bn, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=4, nrows=1)
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_bn_year = df_bn_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+E30+E31)' : 'E28',
'F45 1)' : 'F45'})
else:
df_bn_year = pd.read_excel(url_ofs_bn, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=3, nrows=1)
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_bn_year = df_bn_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+E30+E31)' : 'E28',
'F45 1)' : 'F45'})
# supprimer les 3 premières colonnes
df_bn_year = df_bn_year.iloc[:,3:]
# remplacer ... par NaN
df_bn_year = df_bn_year.replace('...', np.nan)
df_bn_year = df_bn_year.replace('…', np.nan)
# corrections des scories
# remplacer valeurs vides contenant " " ou "0 " ou " " ou ". " ou "."
df_bn_year = df_bn_year.replace('0 ', 0)
df_bn_year = df_bn_year.replace('0', 0)
df_bn_year = df_bn_year.replace('. ', np.nan)
df_bn_year = df_bn_year.replace('.', np.nan)
df_bn_year = df_bn_year.replace('..', np.nan)
df_bn_year = df_bn_year.replace('….', np.nan)
df_bn_year = df_bn_year.replace(' ', np.nan)
df_bn_year = df_bn_year.replace(' ', np.nan)
# ajouer l'année
df_bn_year['Année'] = year
# ajout de la ligne annuelle
df_bn = pd.concat([df_bn, df_bn_year], sort=True)
# ajouter l'index sur l'année
df_bn = df_bn.set_index('Année')
df_bn['NBIB'] = 1
# ajout du df pour la moyenne
df_bn_moyennes = df_bn
# calcul des réponses non vides
df_bn_reponses = df_bn/df_bn
df_bn_reponses = df_bn_reponses.fillna(0)
df_bn
df_bn_reponses
# afficher le nom des colonnes pour tester si tout est OK
df_bn.columns
Période d'observation : 2003-2018
# fichier OFS pour les Villes de plus de 10'000 habitants : totaux, moyennes et réponses
# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2003,2019))
lignes = {2003 : 59, 2004 : 57, 2005 : 104, 2006 : 99, 2007 : 105, 2008 : 115, 2009 : 118, 2010 : 123,
2011 : 119, 2012 : 122, 2013 : 123, 2014 : 123, 2015 : 123, 2016 : 127, 2017 : 125, 2018 : 127}
# initialiser les 3 dataframes
df_villes = pd.DataFrame()
df_villes_moyennes = pd.DataFrame()
df_villes_reponses = pd.DataFrame()
# boucle de calculs pour chaque onglet annuel
for year in years:
# les lignes à ignorer changent en 2015
if year > 2015:
df_villes_year = pd.read_excel(url_ofs_villes, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=4, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_villes_year = df_villes_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
else:
df_villes_year = pd.read_excel(url_ofs_villes, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=3, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_villes_year = df_villes_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
# supprimer les 4 premières lignes
df_villes_year = df_villes_year.iloc[4:,:]
# garder les lignes avec code sur la première colonne
count_year = df_villes_year['Unnamed: 0'].count()
df_villes_year = df_villes_year.loc[df_villes_year['Unnamed: 0'].notnull()]
# supprimer les 3 premières colonnes
df_villes_year = df_villes_year.iloc[:,3:]
# remplacer ... par NaN
df_villes_year = df_villes_year.replace('...', np.nan)
df_villes_year = df_villes_year.replace('…', np.nan)
# corrections des scories
# lignes de 2018 CD1 : "672...8" et "1757...5"
df_villes_year = df_villes_year.replace('672...8', 672.8)
df_villes_year = df_villes_year.replace('1757...5', 1757.5)
# remplacer valeurs vides contenant " " ou "0 " ou " " ou ". " ou "."
df_villes_year = df_villes_year.replace('0 ', 0)
df_villes_year = df_villes_year.replace('0', 0)
df_villes_year = df_villes_year.replace('. ', np.nan)
df_villes_year = df_villes_year.replace('.', np.nan)
df_villes_year = df_villes_year.replace('..', np.nan)
df_villes_year = df_villes_year.replace('….', np.nan)
df_villes_year = df_villes_year.replace(' ', np.nan)
df_villes_year = df_villes_year.replace(' ', np.nan)
# calcul des totaux, moyennes et réponses
df_villes_year_tot = df_villes_year.sum()
df_villes_year_mean = df_villes_year.mean()
df_villes_year_reponses = df_villes_year.count()
# ajouer l'année
df_villes_year_tot['Année'] = year
df_villes_year_mean['Année'] = year
df_villes_year_reponses['Année'] = year
# calcul du nombre de lignes
df_villes_year_tot['NBIB'] = count_year
df_villes_year_mean['NBIB'] = count_year
df_villes_year_reponses['NBIB'] = count_year
# ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et le nombre de réponses
df_villes = df_villes.append(df_villes_year_tot, ignore_index=True)
df_villes_moyennes = df_villes_moyennes.append(df_villes_year_mean, ignore_index=True)
df_villes_reponses = df_villes_reponses.append(df_villes_year_reponses, ignore_index=True)
# test des champs
for champ in df_villes_year.columns:
if (df_villes_year.dtypes[champ] == 'object'):
print (' ERROR IN ' + str(year) + ' ' + champ)
print (df_villes_year[champ])
# convertir l'année en entiers et ajouter l'index sur l'année
df_villes['Année'] = df_villes['Année'].astype(int)
df_villes_moyennes['Année'] = df_villes_moyennes['Année'].astype(int)
df_villes_reponses['Année'] = df_villes_reponses['Année'].astype(int)
df_villes = df_villes.set_index('Année')
df_villes_moyennes = df_villes_moyennes.set_index('Année')
df_villes_reponses = df_villes_reponses.set_index('Année')
df_villes_reponses = df_villes_reponses.fillna(0)
# supprimer les 4 colonnes vides de fin ajoutées à cause de "." à la fin du tableau de 2017
del df_villes['Unnamed: 84']
del df_villes['Unnamed: 85']
del df_villes['Unnamed: 86']
del df_villes['Unnamed: 87']
del df_villes_moyennes['Unnamed: 84']
del df_villes_moyennes['Unnamed: 85']
del df_villes_moyennes['Unnamed: 86']
del df_villes_moyennes['Unnamed: 87']
del df_villes_reponses['Unnamed: 84']
del df_villes_reponses['Unnamed: 85']
del df_villes_reponses['Unnamed: 86']
del df_villes_reponses['Unnamed: 87']
df_villes
df_villes_moyennes
df_villes_reponses
# afficher le nom des colonnes pour tester si tout est OK
df_villes.columns
Période d'observation : 2008-2018
# fichier OFS pour les Communes : totaux, moyennes et réponses
# liste d'onglets et de lignes à garder sur chaque onglet annuel sur Excel
years = list(range(2008,2019))
lignes = {2008 : 406, 2009 : 394, 2010 : 410, 2011 : 469, 2012 : 472, 2013 : 486,
2014 : 525, 2015 : 531, 2016 : 532, 2017 : 535, 2018 : 542}
# initialiser les 3 dataframes
df_communes = pd.DataFrame()
df_communes_moyennes = pd.DataFrame()
df_communes_reponses = pd.DataFrame()
# boucle de calculs pour chaque onglet annuel
for year in years:
# les lignes à ignorer changent en 2015
if year > 2015:
df_communes_year = pd.read_excel(url_ofs_communes, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=4, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_communes_year = df_communes_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
else:
df_communes_year = pd.read_excel(url_ofs_communes, header=0, encoding=sys.getfilesystemencoding(),
sheet_name=str(year), skiprows=3, nrows=lignes[year])
# renommer les colonnes qui ont des commentaires ou des infos entre parenthèses
df_communes_year = df_communes_year.rename(columns={'E26 (E27+E28)' : 'E26',
'E28 (E28b+E29+ E30+E31)' : 'E28',
'E28 (E29+ E30+E31)' : 'E28',
'F45 1)' : 'F45'})
# supprimer les 4 premières lignes
df_communes_year = df_communes_year.iloc[4:,:]
# garder les lignes avec code sur la première colonne
count_year = df_communes_year['Unnamed: 0'].count()
df_communes_year = df_communes_year.loc[df_communes_year['Unnamed: 0'].notnull()]
# supprimer les 4 premières colonnes
df_communes_year = df_communes_year.iloc[:,4:]
# remplacer ... par NaN
df_communes_year = df_communes_year.replace('...', np.nan)
df_communes_year = df_communes_year.replace('…', np.nan)
# corrections des scories
# remplacer valeurs vides contenant " " ou "0 " ou " " ou ". " ou "."
df_communes_year = df_communes_year.replace('0 ', 0)
df_communes_year = df_communes_year.replace('0', 0)
df_communes_year = df_communes_year.replace('. ', np.nan)
df_communes_year = df_communes_year.replace('.', np.nan)
df_communes_year = df_communes_year.replace('..', np.nan)
df_communes_year = df_communes_year.replace('….', np.nan)
df_communes_year = df_communes_year.replace(' …', np.nan)
df_communes_year = df_communes_year.replace('.........', np.nan)
df_communes_year = df_communes_year.replace(' ', np.nan)
df_communes_year = df_communes_year.replace(' ', np.nan)
# convertir le reste en nombres
# for champ in df_communes_year.columns:
# df_communes_year[champ] = pd.to_numeric(df_communes_year[champ])
# calcul des totaux, moyennes et réponses
df_communes_year_tot = df_communes_year.sum()
df_communes_year_mean = df_communes_year.mean()
df_communes_year_reponses = df_communes_year.count()
# ajouer l'année
df_communes_year_tot['Année'] = year
df_communes_year_mean['Année'] = year
df_communes_year_reponses['Année'] = year
# calcul du nombre de lignes
df_communes_year_tot['NBIB'] = count_year
df_communes_year_mean['NBIB'] = count_year
df_communes_year_reponses['NBIB'] = count_year
# ajouter les valeurs de l'année aux dataframes pour la somme, la moyenne et le nombre de réponses
df_communes = df_communes.append(df_communes_year_tot, ignore_index=True)
df_communes_moyennes = df_communes_moyennes.append(df_communes_year_mean, ignore_index=True)
df_communes_reponses = df_communes_reponses.append(df_communes_year_reponses, ignore_index=True)
# test des champs
for champ in df_communes_year.columns:
if (df_communes_year.dtypes[champ] == 'object'):
print (' ERROR IN ' + str(year) + ' ' + champ)
print (df_communes_year[champ])
# convertir l'année en entiers et ajouter l'index sur l'année
df_communes['Année'] = df_communes['Année'].astype(int)
df_communes_moyennes['Année'] = df_communes_moyennes['Année'].astype(int)
df_communes_reponses['Année'] = df_communes_reponses['Année'].astype(int)
df_communes = df_communes.set_index('Année')
df_communes_moyennes = df_communes_moyennes.set_index('Année')
df_communes_reponses = df_communes_reponses.set_index('Année')
df_communes_reponses = df_communes_reponses.fillna(0)
# ajouter les lignes pour 2003 - 2007
df_communes.loc[2003] = np.nan
df_communes.loc[2004] = np.nan
df_communes.loc[2005] = np.nan
df_communes.loc[2006] = np.nan
df_communes.loc[2007] = np.nan
df_communes_moyennes.loc[2003] = np.nan
df_communes_moyennes.loc[2004] = np.nan
df_communes_moyennes.loc[2005] = np.nan
df_communes_moyennes.loc[2006] = np.nan
df_communes_moyennes.loc[2007] = np.nan
df_communes_reponses.loc[2003] = np.nan
df_communes_reponses.loc[2004] = np.nan
df_communes_reponses.loc[2005] = np.nan
df_communes_reponses.loc[2006] = np.nan
df_communes_reponses.loc[2007] = np.nan
df_communes
df_communes_moyennes
df_communes_reponses
# afficher le nom des colonnes
df_communes.columns
# export Excel des dataframes individuels
df_unis.to_excel('results/export_ofs_bibliotheques_universitaires.xlsx')
df_unis_moyennes.to_excel('results/export_ofs_bibliotheques_universitaires_moyennes.xlsx')
df_unis_reponses.to_excel('results/export_ofs_bibliotheques_universitaires_reponses.xlsx')
df_unis_reseaux.to_excel('results/export_ofs_reseaux_bibliotheques_universites.xlsx')
df_unis_reseaux_moyennes.to_excel('results/export_ofs_reseaux_bibliotheques_universites_moyennes.xlsx')
df_unis_reseaux_reponses.to_excel('results/export_ofs_reseaux_bibliotheques_universites_reponses.xlsx')
df_hes.to_excel('results/export_ofs_bibliotheques_hes.xlsx')
df_hes_moyennes.to_excel('results/export_ofs_bibliotheques_hes_moyennes.xlsx')
df_hes_reponses.to_excel('results/export_ofs_bibliotheques_hes_reponses.xlsx')
df_hep.to_excel('results/export_ofs_bibliotheques_hep.xlsx')
df_hep_moyennes.to_excel('results/export_ofs_bibliotheques_hep_moyennes.xlsx')
df_hep_reponses.to_excel('results/export_ofs_bibliotheques_hep_reponses.xlsx')
df_bn.to_excel('results/export_ofs_bibliotheque_nationale.xlsx')
df_bn_moyennes.to_excel('results/export_ofs_bibliotheque_nationale_moyennes.xlsx')
df_bn_reponses.to_excel('results/export_ofs_bibliotheque_nationale_reponses.xlsx')
df_villes.to_excel('results/export_ofs_bibliotheques_publiques_villes.xlsx')
df_villes_moyennes.to_excel('results/export_ofs_bibliotheques_publiques_villes_moyennes.xlsx')
df_villes_reponses.to_excel('results/export_ofs_bibliotheques_publiques_villes_reponses.xlsx')
df_communes.to_excel('results/export_ofs_bibliotheques_publiques_communes.xlsx')
df_communes_moyennes.to_excel('results/export_ofs_bibliotheques_publiques_communes_moyennes.xlsx')
df_communes_reponses.to_excel('results/export_ofs_bibliotheques_publiques_communes_reponses.xlsx')
# export CSV des dataframes individuels
df_unis.to_csv('results/export_ofs_bibliotheques_universitaires.csv', sep='\t')
df_unis_moyennes.to_csv('results/export_ofs_bibliotheques_universitaires_moyennes.csv', sep='\t')
df_unis_reponses.to_csv('results/export_ofs_bibliotheques_universitaires_reponses.csv', sep='\t')
df_unis_reseaux.to_csv('results/export_ofs_reseaux_bibliotheques_universites.csv', sep='\t')
df_unis_reseaux_moyennes.to_csv('results/export_ofs_reseaux_bibliotheques_universites_moyennes.csv', sep='\t')
df_unis_reseaux_reponses.to_csv('results/export_ofs_reseaux_bibliotheques_universites_reponses.csv', sep='\t')
df_hes.to_csv('results/export_ofs_bibliotheques_hes.csv', sep='\t')
df_hes_moyennes.to_csv('results/export_ofs_bibliotheques_hes_moyennes.csv', sep='\t')
df_hes_reponses.to_csv('results/export_ofs_bibliotheques_hes_reponses.csv', sep='\t')
df_hep.to_csv('results/export_ofs_bibliotheques_hep.csv', sep='\t')
df_hep_moyennes.to_csv('results/export_ofs_bibliotheques_hep_moyennes.csv', sep='\t')
df_hep_reponses.to_csv('results/export_ofs_bibliotheques_hep_reponses.csv', sep='\t')
df_bn.to_csv('results/export_ofs_bibliotheque_nationale.csv', sep='\t')
df_bn_moyennes.to_csv('results/export_ofs_bibliotheque_nationale_moyennes.csv', sep='\t')
df_bn_reponses.to_csv('results/export_ofs_bibliotheque_nationale_reponses.csv', sep='\t')
df_villes.to_csv('results/export_ofs_bibliotheques_publiques_villes.csv', sep='\t')
df_villes_moyennes.to_csv('results/export_ofs_bibliotheques_publiques_villes_moyennes.csv', sep='\t')
df_villes_reponses.to_csv('results/export_ofs_bibliotheques_publiques_villes_reponses.csv', sep='\t')
df_communes.to_csv('results/export_ofs_bibliotheques_publiques_communes.csv', sep='\t')
df_communes_moyennes.to_csv('results/export_ofs_bibliotheques_publiques_communes_moyennes.csv', sep='\t')
df_communes_reponses.to_csv('results/export_ofs_bibliotheques_publiques_communes_reponses.csv', sep='\t')
# ajout d'une colonne pourtaguer le type de bibliothèque pour les sommes
df_unis['TYPE'] = 'Bibliothèques universitaires'
df_unis_reseaux['TYPE'] = 'Réseaux de bibliothèques des universités'
df_hes['TYPE'] = 'Réseaux de bibliothèques des HES'
df_hep['TYPE'] = 'Bibliothèques des HEP'
df_bn['TYPE'] = 'Bibliothèque Nationale Suisse'
df_villes['TYPE'] = 'Bibliothèques publiques des villes'
df_communes['TYPE'] = 'Bibliothèques publiques communales et mixtes'
# ajout d'une colonne pourtaguer le type de bibliothèque pour les moyennes
df_unis_moyennes['TYPE'] = 'Bibliothèques universitaires'
df_unis_reseaux_moyennes['TYPE'] = 'Réseaux de bibliothèques des universités'
df_hes_moyennes['TYPE'] = 'Réseaux de bibliothèques des HES'
df_hep_moyennes['TYPE'] = 'Bibliothèques des HEP'
df_bn_moyennes['TYPE'] = 'Bibliothèque Nationale Suisse'
df_villes_moyennes['TYPE'] = 'Bibliothèques publiques des villes'
df_communes_moyennes['TYPE'] = 'Bibliothèques publiques communales et mixtes'
# ajout d'une colonne pourtaguer le type de bibliothèque pour le nombre de réponses
df_unis_reponses['TYPE'] = 'Bibliothèques universitaires'
df_unis_reseaux_reponses['TYPE'] = 'Réseaux de bibliothèques des universités'
df_hes_reponses['TYPE'] = 'Réseaux de bibliothèques des HES'
df_hep_reponses['TYPE'] = 'Bibliothèques des HEP'
df_bn_reponses['TYPE'] = 'Bibliothèque Nationale Suisse'
df_villes_reponses['TYPE'] = 'Bibliothèques publiques des villes'
df_communes_reponses['TYPE'] = 'Bibliothèques publiques communales et mixtes'
# fusion des df
df_total = pd.concat([df_unis, df_unis_reseaux, df_hes, df_hep, df_bn, df_villes, df_communes], sort=True)
# fusion des df pour les moyennes
df_moyennes = pd.concat([df_unis_moyennes, df_unis_reseaux_moyennes, df_hes_moyennes, df_hep_moyennes, df_bn_moyennes, df_villes_moyennes, df_communes_moyennes], sort=True)
# fusion des df pour les reponses
df_reponses = pd.concat([df_unis_reponses, df_unis_reseaux_reponses, df_hes_reponses, df_hep_reponses, df_bn_reponses, df_villes_reponses, df_communes_reponses], sort=True)
# export CSV et Excel
df_total.to_csv('results/export_ofs_totaux.csv', sep='\t')
df_total.to_excel('results/export_ofs_totaux.xlsx')
df_moyennes.to_csv('results/export_ofs_moyennes.csv', sep='\t')
df_moyennes.to_excel('results/export_ofs_moyennes.xlsx')
df_reponses.to_csv('results/export_ofs_reponses.csv', sep='\t')
df_reponses.to_excel('results/export_ofs_reponses.xlsx')
df_total
# afficher le nom des colonnes
df_total.columns
df_population_2018 = pd.read_excel(url_ofs_population, sheet_name='2018' , skiprows=3, nrows=1, usecols='A,H', names=('canton', '2018'))
df_population_2018.iloc[0,0] = 'Suisse'
df_population_2018
# fichier OFS : une année par onglet et 1 lignes en trop en haut
df_population = pd.DataFrame()
for annee in range (2003, 2019) :
if annee > 2010 :
df_population_temp = pd.read_excel(url_ofs_population, sheet_name=str(annee) , skiprows=3, nrows=1, usecols='A,H', names=('canton', str(annee)))
else :
df_population_temp = pd.read_excel(url_ofs_population, sheet_name=str(annee) , skiprows=4, nrows=1, usecols='A,H', names=('canton', str(annee)))
# corriger la valeur pour la Suisse qui a des numéros de notes
df_population_temp.iloc[0,0] = 'Nombre d\'habitants'
# Renommer la colonne
df_population_temp = df_population_temp.rename(columns={'canton' : 'Année'})
# ajouter index et concatenner les colonnes
df_population_temp = df_population_temp.set_index('Année')
df_population = pd.concat([df_population, df_population_temp], axis=1)
# print (str(annee))
df_population
# transposer
df_population = df_population.transpose()
df_population
df_population.dtypes
# export en CSV et Excel
df_population.to_csv('results/export_ofs_population_suisse_2003_2018.csv', sep='\t')
df_population.to_excel('results/export_ofs_population_suisse_2003_2018.xlsx')
# graphique pour toute la suisse
df_population.plot(figsize=(15, 6), lw=2, title='Population Suisse')
df_etudiants = pd.read_excel(url_ofs_etudiants, skiprows=5, nrows=28)
df_etudiants
# renommer la dernière colonne
df_etudiants = df_etudiants.rename(columns={'Unnamed: 10' : 'Hautes écoles spécialisées et pédagogiques'})
# supprimmer les premières 4 lignes
df_etudiants = df_etudiants.iloc[5:,:]
# recupérer l'année
df_etudiants['Année'] = df_etudiants['Unnamed: 0'].str[0:4].astype(int)
# remplacer ... par N/A
df_etudiants = df_etudiants.replace('…', 0)
df_etudiants
# ajouter le cycle 1+2 et 3
df_etudiants['Etudiants cycle 3'] = df_etudiants[df_etudiants.columns[-4]] + df_etudiants['Hautes écoles'] + df_etudiants['Hautes écoles spécialisées et pédagogiques']
df_etudiants['Etudiants cycles 1 et 2'] = df_etudiants[df_etudiants.columns[1]] + df_etudiants[df_etudiants.columns[2]] + df_etudiants[df_etudiants.columns[3]] + df_etudiants[df_etudiants.columns[4]] + df_etudiants[df_etudiants.columns[5]] + df_etudiants[df_etudiants.columns[6]] + df_etudiants[df_etudiants.columns[7]]
df_etudiants['Etudiants tous cycles confondus'] = df_etudiants['Etudiants cycle 3'] + df_etudiants['Etudiants cycles 1 et 2']
df_etudiants
df_etudiants_fin = df_etudiants.loc[df_etudiants['Année'] > 2002]
df_etudiants_fin = df_etudiants_fin.set_index('Année')
df_etudiants_fin
# export en CSV et Excel
df_etudiants_fin.to_csv('results/export_ofs_etudiants_2003_2018.csv', sep='\t')
df_etudiants_fin.to_excel('results/export_ofs_etudiants_2003_2018.xlsx')
# graphique d'étudiants par cycle
ax = df_etudiants_fin.plot(figsize=(15, 6), lw=2, title='Nombre d\'étudiants par cycle')
E31 = pd.DataFrame()
E31['Bibliothèques universitaires'] = df_unis['E31'].fillna(0)
E31['Réseaux de bibliothèques des universités'] = df_unis_reseaux['E31'].fillna(0)
E31['Réseaux de bibliothèques des HES'] = df_hes['E31'].fillna(0)
E31['Réseaux de bibliothèques des HEP'] = df_hep['E31'].fillna(0)
E31['Bibliothèque nationale'] = df_bn['E31'].fillna(0)
E31['Bibliothèques publiques des villes'] = df_villes['E31'].fillna(0)
E31['Bibliothèques publiques communales et mixtes'] = df_communes['E31'].fillna(0)
E31
E32 = pd.DataFrame()
E32['Bibliothèques universitaires (ressources physiques)'] = E31['Bibliothèques universitaires'] - df_unis['E32'].fillna(0)
E32['Réseaux de bibliothèques des universités (ressources physiques)'] = E31['Réseaux de bibliothèques des universités'] - df_unis_reseaux['E32'].fillna(0)
E32['Réseaux de bibliothèques des HES (ressources physiques)'] = E31['Réseaux de bibliothèques des HES'] - df_hes['E32'].fillna(0)
E32['Bibliothèques des HEP (ressources physiques)'] = E31['Réseaux de bibliothèques des HEP'] - df_hep['E32'].fillna(0)
E32['Bibliothèque nationale (ressources physiques)'] = E31['Bibliothèque nationale'] - df_bn['E32'].fillna(0)
E32['Bibliothèques publiques des villes (ressources physiques)'] = E31['Bibliothèques publiques des villes'] - df_villes['E32'].fillna(0)
E32['Bibliothèques publiques communales et mixtes (ressources physiques)'] = E31['Bibliothèques publiques communales et mixtes'] - df_communes['E32'].fillna(0)
E32
E32['Bibliothèques universitaires (ressources électroniques)'] = df_unis['E32'].fillna(0)
E32['Réseaux de bibliothèques des universités (ressources électroniques)'] = df_unis_reseaux['E32'].fillna(0)
E32['Réseaux de bibliothèques des HES (ressources électroniques)'] = df_hes['E32'].fillna(0)
E32['Bibliothèques des HEP (ressources électroniques)'] = df_hep['E32'].fillna(0)
E32['Bibliothèque nationale (ressources électroniques)'] = df_bn['E32'].fillna(0)
E32['Bibliothèques publiques des villes (ressources électroniques)'] = df_villes['E32'].fillna(0)
E32['Bibliothèques publiques communales et mixtes (ressources électroniques)'] = df_communes['E32'].fillna(0)
E32
# export en CSV et Excel
E32.to_csv('results/E32.csv', sep='\t')
E32.to_excel('results/E32.xlsx')
# création de la palette de couleurs à partir de tab20
col = plt.cm.tab20.colors
col1 = [col[0], col[2], col[4], col[6], col[8], col[10], col[12], col[14], col[16], col[18]]
col2 = [col[1], col[3], col[5], col[7], col[9], col[11], col[13], col[15], col[17], col[19]]
# graphique E32 et E31-E32 pour tous les types de bibliothèque
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
col3 = col2[0:7]+col1[0:7]
E32.plot.bar(stacked=True, color = col3, ax=ax, zorder=7, edgecolor='white', linewidth=1)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 125000000])
ax.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32)', fontsize=14, pad=20)
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/E32_E31_all_1.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
# graphique E32 et E31-E32 pour les bibs universitaires
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles'].reset_index()
col3 = col2[0:2]+col1[0:2]
E32.iloc[:,[0,1,7,8]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
etu['Hautes écoles'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants universitaires')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition (CHF)')
ax2.set_ylabel('Nombre d\'étudiants universitaires')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 90000000])
ax2.set_ylim([0, 155000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : bibliothèques universitaires', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_universites_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 pour les HES et HEP
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles spécialisées et pédagogiques'].reset_index()
col3 = col2[2:4]+col1[2:4]
E32.iloc[:,[2,3,9,10]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
etu['Hautes écoles spécialisées et pédagogiques'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19,
label='Nombre d\'étudiants des HES et HEP')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition (CHF)')
ax2.set_ylabel('Nombre d\'étudiants des HES et HEP')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 8000000])
ax2.set_ylim([0, 110000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : bibliothèques des HES et HEP', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_hes_hep_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 pour la BN et les bibs publiques
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[4:7]+col1[4:7]
E32.iloc[:,[4,5,6,11,12,13]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 30000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : BN et bibliothèques publiques', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_bn_villes_communes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 pour tous les types de bibliothèque
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
E32.iloc[:,0:7].plot.bar(stacked=True, color = col2, ax=ax, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32.iloc[:,7:].plot.bar(stacked=True, color = col1, ax=ax, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 85000000])
# titre
ax.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32)', fontsize=14, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/E32_E31_all_2.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
E32_cat = pd.DataFrame()
E32_cat['Ressources physiques'] = E32.iloc[:,0] + E32.iloc[:,1] + E32.iloc[:,2] + E32.iloc[:,3] + E32.iloc[:,4] + E32.iloc[:,5] + E32.iloc[:,6]
E32_cat['Ressources électroniques'] = E32.iloc[:,7] + E32.iloc[:,8] + E32.iloc[:,9] + E32.iloc[:,10] + E32.iloc[:,11] + E32.iloc[:,12] + E32.iloc[:,13]
E32_cat.to_csv('results/E32_toutes_bibliotheques_confondues.csv', sep='\t')
E32_cat.to_excel('results/E32_toutes_bibliotheques_confondues.xlsx')
E32_cat
# graphique E32 et E31-E32 pour tous les types de bibliothèque : variante en deux couleurs
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
E32_cat['Ressources physiques'].plot.bar(stacked=True, color = col2[9], ax=ax, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32_cat['Ressources électroniques'].plot.bar(stacked=True, color = col1[9], ax=ax, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 85000000])
# titre
ax.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) toutes bibliothèques confondues', fontsize=13, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/E32_E31_all_3.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
# graphique E32 et E31-E32 pour les bibs universitaires
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles'].reset_index()
E32.iloc[:,[0,1]].plot.bar(stacked=True, color = col2, ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1, legend=False)
E32.iloc[:,[7,8]].plot.bar(stacked=True, color = col1, ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
etu['Hautes écoles'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants des universités')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax2.set_ylabel('Nombre d\'étudiants universitaires')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 55000000])
ax2.set_ylim([0, 155000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : bibliothèques universitaires', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_universites_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 pour les HES et HEP
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles spécialisées et pédagogiques'].reset_index()
E32.iloc[:,[2,3]].plot.bar(stacked=True, color = col2[2:], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32.iloc[:,[9,10]].plot.bar(stacked=True, color = col1[2:], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
etu['Hautes écoles spécialisées et pédagogiques'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants des hautes écoles spécialisées et pédagogiques')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax2.set_ylabel('Nombre d\'étudiants des HES et HEP')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 6000000])
ax2.set_ylim([0, 110000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : bibliothèques des HES et HEP', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_hes_hep_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 pour la BN et les bibs publiques
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
E32.iloc[:,[4,5,6]].plot.bar(stacked=True, color = col2[4:], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32.iloc[:,[11,12,13]].plot.bar(stacked=True, color = col1[4:], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 30000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : BN et bibliothèques publiques', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_bn_villes_communes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
E31_moyennes = pd.DataFrame()
E31_moyennes['Bibliothèques universitaires'] = df_unis_moyennes['E31'].fillna(0)
E31_moyennes['Réseaux de bibliothèques des universités'] = df_unis_reseaux_moyennes['E31'].fillna(0)
E31_moyennes['Réseaux de bibliothèques des HES'] = df_hes_moyennes['E31'].fillna(0)
E31_moyennes['Réseaux de bibliothèques des HEP'] = df_hep_moyennes['E31'].fillna(0)
E31_moyennes['Bibliothèque nationale'] = df_bn_moyennes['E31'].fillna(0)
E31_moyennes['Bibliothèques publiques des villes'] = df_villes_moyennes['E31'].fillna(0)
E31_moyennes['Bibliothèques publiques communales et mixtes'] = df_communes_moyennes['E31'].fillna(0)
E31_moyennes
E32_moyennes = pd.DataFrame()
E32_moyennes['Bibliothèques universitaires (ressources physiques)'] = E31_moyennes['Bibliothèques universitaires'] - df_unis_moyennes['E32'].fillna(0)
E32_moyennes['Réseaux de bibliothèques des universités (ressources physiques)'] = E31_moyennes['Réseaux de bibliothèques des universités'] - df_unis_reseaux_moyennes['E32'].fillna(0)
E32_moyennes['Réseaux de bibliothèques des HES (ressources physiques)'] = E31_moyennes['Réseaux de bibliothèques des HES'] - df_hes_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèques des HEP (ressources physiques)'] = E31_moyennes['Réseaux de bibliothèques des HEP'] - df_hep_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèque nationale (ressources physiques)'] = E31_moyennes['Bibliothèque nationale'] - df_bn_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèques publiques des villes (ressources physiques)'] = E31_moyennes['Bibliothèques publiques des villes'] - df_villes_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèques publiques communales et mixtes (ressources physiques)'] = E31_moyennes['Bibliothèques publiques communales et mixtes'] - df_communes_moyennes['E32'].fillna(0)
E32_moyennes
E32_moyennes['Bibliothèques universitaires (ressources électroniques)'] = df_unis_moyennes['E32'].fillna(0)
E32_moyennes['Réseaux de bibliothèques des universités (ressources électroniques)'] = df_unis_reseaux_moyennes['E32'].fillna(0)
E32_moyennes['Réseaux de bibliothèques des HES (ressources électroniques)'] = df_hes_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèques des HEP (ressources électroniques)'] = df_hep_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèque nationale (ressources électroniques)'] = df_bn_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèques publiques des villes (ressources électroniques)'] = df_villes_moyennes['E32'].fillna(0)
E32_moyennes['Bibliothèques publiques communales et mixtes (ressources électroniques)'] = df_communes_moyennes['E32'].fillna(0)
E32_moyennes
# export en CSV et Excel
E32_moyennes.to_csv('results/E32_moyennes.csv', sep='\t')
E32_moyennes.to_excel('results/E32_moyennes.xlsx')
# graphique E32 et E31-E32 pour tous les types de bibliothèque : valeurs moyennes
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
col3 = col2[0:7]+col1[0:7]
E32_moyennes.plot.bar(stacked=True, color = col3, ax=ax, zorder=7, edgecolor='white', linewidth=1)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 9000000])
# titre
ax.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : valeurs moyennes', fontsize=14, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/E32_E31_all_moyennes_1.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
# graphique E32 et E31-E32 pour les bibs universitaires : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles'].reset_index()
col3 = col2[0:1]+col1[0:1]
rects1 = E32_moyennes.iloc[:,[0,7]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
etu['Hautes écoles'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants universitaires')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'étudiants universitaires')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 6000000])
ax2.set_ylim([0, 155000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques universitaires', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
totals = df_unis_moyennes['E31']
etiquettes = df_unis_reponses['E32'].astype(int)
for i, etiquette, total in zip(ax1.patches, etiquettes, totals):
ax1.text(i.get_x()+.03, total + 30000, 'N=' + str(etiquette), fontsize=8, color='dimgrey', zorder=29)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_universites_moyennes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 moyenne pour les HES et HEP : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles spécialisées et pédagogiques'].reset_index()
col3 = col2[2:3]+col1[2:3]
col4 = col2[3:4]+col1[3:4]
E32_moyennes.iloc[:,[2,9]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32_moyennes.iloc[:,[3,10]].plot.bar(stacked=True, color = col4, ax=ax1, zorder=7, align='edge', width=0.4, edgecolor='white', linewidth=1)
etu['Hautes écoles spécialisées et pédagogiques'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19,
label='Nombre d\'étudiants des HES et HEP')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'étudiants des HES et HEP')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 220000])
ax2.set_ylim([0, 110000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne pour les bibliothèques des HES et HEP', fontsize=12, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
totals1 = df_hes_moyennes['E31']
etiquettes1 = df_hes_reponses['E32'].astype(int)
totals2 = df_hep_moyennes['E31'].fillna(0).sort_index()
etiquettes2 = df_hep_reponses['E32'].fillna(0).astype(int).sort_index()
for i, etiquette, total in zip(ax1.patches, etiquettes1, totals1):
ax1.text(i.get_x()-.38, total + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
for i, etiquette, total in zip(ax1.patches, etiquettes2, totals2):
if (etiquette != 0):
ax1.text(i.get_x()+.04, total + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=39)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_hes_hep_moyennes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 pour la BN
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[4:5]+col1[4:5]
E32.iloc[:,[4,11]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 2000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : bibliothèque nationale', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_bn.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 pour les bibs publiques des villes (>10'000 habitants) : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[5:6]+col1[5:6]
E32_moyennes.iloc[:,[5,12]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 250000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques publiques des villes (>10\'000 habitants)', fontsize=11, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
totals = df_villes_moyennes['E31']
etiquettes = df_villes_reponses['E32'].astype(int)
for i, etiquette, total in zip(ax1.patches, etiquettes, totals):
ax1.text(i.get_x()+.03, total + 2000, 'N=' + str(etiquette), fontsize=8, color='dimgrey', zorder=29)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_villes_moyennes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 pour les bibs publiques des communes : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[6:7]+col1[6:7]
E32_moyennes.iloc[:,[6,13]].plot.bar(stacked=True, color = col4, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 18000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques publiques des communes (<10\'000 habitants)', fontsize=11, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
totals = df_communes_moyennes['E31'].fillna(0).sort_index()
etiquettes = df_communes_reponses['E32'].fillna(0).astype(int).sort_index()
etiquettes2 = df_communes_reponses['E31'].fillna(0).astype(int).sort_index()
for i, etiquette, etiquette2, total in zip(ax1.patches, etiquettes, etiquettes2, totals):
if (etiquette != 0):
ax1.text(i.get_x()+.03, total + 100, 'N=' + str(etiquette), fontsize=8, color='dimgrey', zorder=29)
else :
if (etiquette2 != 0):
ax1.text(i.get_x()+.03, total + 100, 'N=' + str(etiquette2), fontsize=8, color='dimgrey', zorder=29)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_communes_moyennes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 pour tous les types de bibliothèque : valeurs moyennes
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
E32_moyennes.iloc[:,0:7].plot.bar(stacked=True, color = col2, ax=ax, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32_moyennes.iloc[:,7:].plot.bar(stacked=True, color = col1, ax=ax, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 5500000])
# titre
ax.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : valeurs moyennes', fontsize=12, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/E32_E31_all_moyennes_2.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
# graphique E32 et E31-E32 pour les bibs universitaires : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles'].reset_index()
E32_moyennes.iloc[:,0].plot.bar(stacked=True, color = col2[0], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1, legend=False)
E32_moyennes.iloc[:,7].plot.bar(stacked=True, color = col1[0], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
etu['Hautes écoles'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants des universités')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'étudiants universitaires')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 3500000])
ax2.set_ylim([0, 155000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques universitaires', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# ajout des N comme etiquettes
etiquettes = df_unis_reponses['E31'].astype(int).append(df_unis_reponses['E32'].astype(int))
count = 0
for i, etiquette in zip(ax1.patches, etiquettes):
count = count + 1
if (count <17):
ax1.text(i.get_x()-.38, i.get_height() + 20000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
else:
ax1.text(i.get_x()+.03, i.get_height() + 20000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_universites_moyennes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 pour les HES : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles spécialisées et pédagogiques'].reset_index()
E32_moyennes.iloc[:,2].plot.bar(stacked=True, color = col2[2], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32_moyennes.iloc[:,9].plot.bar(stacked=True, color = col1[2], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
etu['Hautes écoles spécialisées et pédagogiques'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants des hautes écoles spécialisées et pédagogiques')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'étudiants des HES et HEP')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 120000])
ax2.set_ylim([0, 110000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques des HES', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
etiquettes = df_hes_reponses['E31'].astype(int).append(df_hes_reponses['E32'].astype(int))
count = 0
for i, etiquette in zip(ax1.patches, etiquettes):
count = count + 1
if (count <17):
ax1.text(i.get_x()-.38, i.get_height() + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
else:
ax1.text(i.get_x()+.03, i.get_height() + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_hes_moyennes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique E32 et E31-E32 pour les HEP : valeurs moyennes
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
etu = df_etudiants_fin['Hautes écoles spécialisées et pédagogiques'].reset_index()
E32_moyennes.iloc[:,3].plot.bar(stacked=True, color = col2[3], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
E32_moyennes.iloc[:,10].plot.bar(stacked=True, color = col1[3], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
etu['Hautes écoles spécialisées et pédagogiques'].plot(style='--', lw=2, color='gray', ax=ax2, zorder=19, label='Nombre d\'étudiants des hautes écoles spécialisées et pédagogiques')
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition moyens (CHF)')
ax2.set_ylabel('Nombre d\'étudiants des HES et HEP')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 140000])
ax2.set_ylim([0, 110000])
# titre
ax1.set_title('Frais d\'acquisition de documents physiques (E31 - E32) et électroniques (E32) : moyenne des bibliothèques des HEP', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# ajout des N comme etiquettes
etiquettes = df_hep_reponses['E31'].fillna(0).astype(int).sort_index().append(df_hep_reponses['E32'].fillna(0).astype(int).sort_index())
count = 0
for i, etiquette in zip(ax1.patches, etiquettes):
count = count + 1
if (count <17):
if (etiquette > 0):
ax1.text(i.get_x()-.38, i.get_height() + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
else:
if (etiquette > 0):
ax1.text(i.get_x()+.03, i.get_height() + 1000, 'N=' + str(etiquette), fontsize=7, color='dimgrey', zorder=29)
# sauvegarder le graphique
plt.savefig('figures/E32_E31_hep_moyennes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
F47_45_37 = pd.DataFrame()
F47_45_37['Bibliothèques universitaires (ressources physiques)'] = df_unis['F37'].fillna(0)
F47_45_37['Réseaux de bibliothèques des universités (ressources physiques)'] = df_unis_reseaux['F37'].fillna(0)
F47_45_37['Réseaux de bibliothèques des HES (ressources physiques)'] = df_hes['F37'].fillna(0)
F47_45_37['Réseaux de bibliothèques des HEP (ressources physiques)'] = df_hep['F37'].fillna(0)
F47_45_37['Bibliothèque nationale (ressources physiques)'] = df_bn['F37'].fillna(0)
F47_45_37['Bibliothèques publiques des villes (ressources physiques)'] = df_villes['F37'].fillna(0)
F47_45_37['Bibliothèques publiques communales et mixtes (ressources physiques)'] = df_communes['F37'].fillna(0)
F47_45_37
F47_45_37['Bibliothèques universitaires (ressources électroniques)'] = df_unis['F45'].fillna(0) + df_unis['F47'].fillna(0) + df_unis['F47a'].fillna(0) + df_unis['F47b'].fillna(0) + df_unis['F47c'].fillna(0) + df_unis['F47d'].fillna(0)
F47_45_37['Réseaux de bibliothèques des universités (ressources électroniques)'] = df_unis_reseaux['F45'].fillna(0) + df_unis_reseaux['F47'].fillna(0) + df_unis_reseaux['F47a'].fillna(0) + df_unis_reseaux['F47b'].fillna(0) + df_unis_reseaux['F47c'].fillna(0) + df_unis_reseaux['F47d'].fillna(0)
F47_45_37['Réseaux de bibliothèques des HES (ressources électroniques)'] = df_hes['F45'].fillna(0) + df_hes['F47'].fillna(0) + df_hes['F47a'].fillna(0) + df_hes['F47b'].fillna(0) + df_hes['F47c'].fillna(0) + df_hes['F47d'].fillna(0)
F47_45_37['Bibliothèques des HEP (ressources électroniques)'] = df_hep['F45'].fillna(0) + df_hep['F47'].fillna(0) + df_hep['F47a'].fillna(0) + df_hep['F47b'].fillna(0) + df_hep['F47c'].fillna(0) + df_hep['F47d'].fillna(0)
F47_45_37['Bibliothèque nationale (ressources électroniques)'] = df_bn['F45'].fillna(0) + df_bn['F47'].fillna(0) + df_bn['F47a'].fillna(0) + df_bn['F47b'].fillna(0) + df_bn['F47c'].fillna(0) + df_bn['F47d'].fillna(0)
F47_45_37['Bibliothèques publiques des villes (ressources électroniques)'] = df_villes['F45'].fillna(0) + df_villes['F47'].fillna(0) + df_villes['F47a'].fillna(0) + df_villes['F47b'].fillna(0) + df_villes['F47c'].fillna(0) + df_villes['F47d'].fillna(0)
F47_45_37['Bibliothèques publiques communales et mixtes (ressources électroniques)'] = df_communes['F45'].fillna(0) + df_communes['F47'].fillna(0) + df_communes['F47a'].fillna(0) + df_communes['F47b'].fillna(0) + df_communes['F47c'].fillna(0) + df_communes['F47d'].fillna(0)
F47_45_37
# export en CSV et Excel
F47_45_37.to_csv('results/F47_45_37.csv', sep='\t')
F47_45_37.to_excel('results/F47_45_37.xlsx')
# création de la palette de couleurs à partir de tab20
col = plt.cm.tab20.colors
col1 = [col[0], col[2], col[4], col[6], col[8], col[10], col[12], col[14], col[16], col[18]]
col2 = [col[1], col[3], col[5], col[7], col[9], col[11], col[13], col[15], col[17], col[19]]
# graphique F47_45_37 pour tous les types de bibliothèque
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
col3 = col2[0:7]+col1[0:7]
F47_45_37.plot.bar(stacked=True, color = col3, ax=ax, zorder=7, edgecolor='white', linewidth=1)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.set_ylabel('Offre totale de documents')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 220000000])
ax.set_title('Offre totale de documents physiques (F37) et électroniques (F45 et F47)', fontsize=14, pad=20)
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/F47_45_37.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
# graphique F47_45_37 pour la BN et les bibs publiques
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[4:7]+col1[4:7]
F47_45_37.iloc[:,[4,5,6,11,12,13]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Offre totale de documents')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 70000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Offre totale de documents physiques (F37) et électroniques (F45 et F47) : BN et bibliothèques publiques', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/EF47_45_37_bn_villes_communes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique F47_45_372 pour tous les types de bibliothèque
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
F47_45_37.iloc[:,0:7].plot.bar(stacked=True, color = col2, ax=ax, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
F47_45_37.iloc[:,7:].plot.bar(stacked=True, color = col1, ax=ax, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.set_ylabel('Offre totale de documents')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 130000000])
# titre
ax.set_title('Offre totale de documents physiques (F37) et électroniques (F45 et F47)', fontsize=14, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/F47_45_37_all_2.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
F47_45_37_cat = pd.DataFrame()
F47_45_37_cat['Ressources physiques'] = F47_45_37.iloc[:,0] + F47_45_37.iloc[:,1] + F47_45_37.iloc[:,2] + F47_45_37.iloc[:,3] + F47_45_37.iloc[:,4] + F47_45_37.iloc[:,5] + F47_45_37.iloc[:,6]
F47_45_37_cat['Ressources électroniques'] = F47_45_37.iloc[:,7] + F47_45_37.iloc[:,8] + F47_45_37.iloc[:,9] + F47_45_37.iloc[:,10] + F47_45_37.iloc[:,11] + F47_45_37.iloc[:,12] + F47_45_37.iloc[:,13]
F47_45_37_cat.to_csv('results/F47_45_37_toutes_bibliotheques_confondues.csv', sep='\t')
F47_45_37_cat.to_excel('results/F47_45_37_toutes_bibliotheques_confondues.xlsx')
F47_45_37_cat
# graphique F47_45_37 pour tous les types de bibliothèque : variante en deux couleurs
plt.style.use('default')
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
F47_45_37_cat['Ressources physiques'].plot.bar(stacked=True, color = col2[9], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
F47_45_37_cat['Ressources électroniques'].plot.bar(stacked=True, color = col1[9], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Offre totale de documents')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 130000000])
ax2.set_ylim([0, 12000000])
# titre
ax1.set_title('Offre totale de documents physiques (F37) et électroniques (F45 et F47) toutes bibliothèques confondues', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/F47_45_37_all_3.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique F47_45_37 pour la BN et les bibs publiques
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
F47_45_37.iloc[:,[4,5,6]].plot.bar(stacked=True, color = col2[4:], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
F47_45_37.iloc[:,[11,12,13]].plot.bar(stacked=True, color = col1[4:], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Frais d\'acquisition totaux (CHF)')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 35000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Offre totale de documents physiques (F37) et électroniques (F45 et F47) : BN et bibliothèques publiques', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/F47_45_37_bn_villes_communes_2.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
G59_62_63_68_71_72 = pd.DataFrame()
G59_62_63_68_71_72['Bibliothèques universitaires (ressources physiques)'] = df_unis['G59'].fillna(0) + df_unis['G62'].fillna(0) + df_unis['G63'].fillna(0) + df_unis['G68'].fillna(0)
G59_62_63_68_71_72['Réseaux de bibliothèques des universités (ressources physiques)'] = df_unis_reseaux['G59'].fillna(0) + df_unis_reseaux['G62'].fillna(0) + df_unis_reseaux['G63'].fillna(0) + df_unis_reseaux['G68'].fillna(0)
G59_62_63_68_71_72['Réseaux de bibliothèques des HES (ressources physiques)'] = df_hes['G59'].fillna(0) + df_hes['G62'].fillna(0) + df_hes['G63'].fillna(0) + df_hes['G68'].fillna(0)
G59_62_63_68_71_72['Réseaux de bibliothèques des HEP (ressources physiques)'] = df_hep['G59'].fillna(0) + df_hep['G62'].fillna(0) + df_hep['G63'].fillna(0) + df_hep['G68'].fillna(0)
G59_62_63_68_71_72['Bibliothèque nationale (ressources physiques)'] = df_bn['G59'].fillna(0) + df_bn['G62'].fillna(0) + df_bn['G63'].fillna(0) + df_bn['G68'].fillna(0)
G59_62_63_68_71_72['Bibliothèques publiques des villes (ressources physiques)'] = df_villes['G59'].fillna(0) + df_villes['G62'].fillna(0) + df_villes['G63'].fillna(0) + df_villes['G68'].fillna(0)
G59_62_63_68_71_72['Bibliothèques publiques communales et mixtes (ressources physiques)'] = df_communes['G59'].fillna(0) + df_communes['G62'].fillna(0) + df_communes['G63'].fillna(0) + df_communes['G68'].fillna(0)
G59_62_63_68_71_72
G59_62_63_68_71_72['Bibliothèques universitaires (ressources électroniques)'] = df_unis['G71'].fillna(0) + df_unis['G72'].fillna(0)
G59_62_63_68_71_72['Réseaux de bibliothèques des universités (ressources électroniques)'] = df_unis_reseaux['G71'].fillna(0) + df_unis_reseaux['G72'].fillna(0)
G59_62_63_68_71_72['Réseaux de bibliothèques des HES (ressources électroniques)'] = df_hes['G71'].fillna(0) + df_hes['G72'].fillna(0)
G59_62_63_68_71_72['Bibliothèques des HEP (ressources électroniques)'] = df_hep['G71'].fillna(0) + df_hep['G72'].fillna(0)
G59_62_63_68_71_72['Bibliothèque nationale (ressources électroniques)'] = df_bn['G71'].fillna(0) + df_bn['G72'].fillna(0)
G59_62_63_68_71_72['Bibliothèques publiques des villes (ressources électroniques)'] = df_villes['G71'].fillna(0) + df_villes['G72'].fillna(0)
G59_62_63_68_71_72['Bibliothèques publiques communales et mixtes (ressources électroniques)'] = df_communes['G71'].fillna(0) + df_communes['G72'].fillna(0)
G59_62_63_68_71_72
# export en CSV et Excel
G59_62_63_68_71_72.to_csv('results/G59_62_63_68_71_72.csv', sep='\t')
G59_62_63_68_71_72.to_excel('results/G59_62_63_68_71_72.xlsx')
# création de la palette de couleurs à partir de tab20
col = plt.cm.tab20.colors
col1 = [col[0], col[2], col[4], col[6], col[8], col[10], col[12], col[14], col[16], col[18]]
col2 = [col[1], col[3], col[5], col[7], col[9], col[11], col[13], col[15], col[17], col[19]]
# graphique G59_62_63_68_71_72 pour tous les types de bibliothèque
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
col3 = col2[0:7]+col1[0:7]
G59_62_63_68_71_72.plot.bar(stacked=True, color = col3, ax=ax, zorder=7, edgecolor='white', linewidth=1)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.set_ylabel('Utilisation totale de documents')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 220000000])
ax.set_title('Utilisation totale de documents physiques (G59, G62, G63 et G68) et électroniques (G71 et G72)', fontsize=14, pad=20)
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/G59_62_63_68_71_72.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
# graphique G59_62_63_68_71_72 pour la BN et les bibs publiques
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
# ajout des 3 graphiques
col3 = col2[4:7]+col1[4:7]
G59_62_63_68_71_72.iloc[:,[4,5,6,11,12,13]].plot.bar(stacked=True, color = col3, ax=ax1, zorder=7, edgecolor='white', linewidth=1)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Utilisation totale de documents')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 40000000])
ax2.set_ylim([0, 9000000])
# titre
ax1.set_title('Utilisation totale de documents physiques (G59, G62, G63 et G68) et électroniques (G71 et G72) : BN et bibliothèques publiques', fontsize=14, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.3), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/G59_62_63_68_71_72_bn_villes_communes_1.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()
# graphique G59_62_63_68_71_72 pour tous les types de bibliothèque
plt.style.use('default')
fig, ax = plt.subplots(1, 1, figsize=(15, 8))
G59_62_63_68_71_72.iloc[:,0:7].plot.bar(stacked=True, color = col2, ax=ax, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
G59_62_63_68_71_72.iloc[:,7:].plot.bar(stacked=True, color = col1, ax=ax, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
ax.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.ticklabel_format(style='plain', axis='y')
ax.set_ylabel('Utilisation totale de documents')
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))
ax.set_xlim(left=-0.8, right=15.8)
ax.set_ylim([0, 130000000])
# titre
ax.set_title('Utilisation totale de documents physiques (G59, G62, G63 et G68) et électroniques (G71 et G72)', fontsize=14, pad=20)
# position de la légende
lgd = ax.legend(loc=3, bbox_to_anchor=(0,-0.4), ncol=2)
fig = ax.get_figure()
fig.savefig('figures/G59_62_63_68_71_72_all_2.png', bbox_extra_artists=(lgd,), bbox_inches='tight', dpi=150)
G59_62_63_68_71_72_cat = pd.DataFrame()
G59_62_63_68_71_72_cat['Ressources physiques'] = G59_62_63_68_71_72.iloc[:,0] + G59_62_63_68_71_72.iloc[:,1] + G59_62_63_68_71_72.iloc[:,2] + G59_62_63_68_71_72.iloc[:,3] + G59_62_63_68_71_72.iloc[:,4] + G59_62_63_68_71_72.iloc[:,5] + G59_62_63_68_71_72.iloc[:,6]
G59_62_63_68_71_72_cat['Ressources électroniques'] = G59_62_63_68_71_72.iloc[:,7] + G59_62_63_68_71_72.iloc[:,8] + G59_62_63_68_71_72.iloc[:,9] + G59_62_63_68_71_72.iloc[:,10] + G59_62_63_68_71_72.iloc[:,11] + G59_62_63_68_71_72.iloc[:,12] + G59_62_63_68_71_72.iloc[:,13]
G59_62_63_68_71_72_cat.to_csv('results/G59_62_63_68_71_72_toutes_bibliotheques_confondues.csv', sep='\t')
G59_62_63_68_71_72_cat.to_excel('results/G59_62_63_68_71_72_toutes_bibliotheques_confondues.xlsx')
G59_62_63_68_71_72_cat
G59_62_63_68_71_72_cat['Ressources électroniques'][2012]
# graphique G59_62_63_68_71_72 pour tous les types de bibliothèque : variante en deux couleurs
# supprimer la valeur de 2012 qui est abérrante
G59_62_63_68_71_72_cat['Ressources électroniques'][2012] = np.nan
plt.style.use('default')
fig, ax1 = plt.subplots(1, 1, figsize=(15, 8))
ax2 = ax1.twinx()
G59_62_63_68_71_72_cat['Ressources physiques'].plot.bar(stacked=True, color = col2[9], ax=ax1, zorder=7, align='edge', width=-0.4, edgecolor='white', linewidth=1)
G59_62_63_68_71_72_cat['Ressources électroniques'].plot.bar(stacked=True, color = col1[9], ax=ax1, zorder=9, align='edge', width=0.4, edgecolor='white', linewidth=1, legend=False)
df_population.plot(style='--', lw=2, color='gray', ax=ax2, zorder=19)
# Intitulé des axes
ax1.set_ylabel('Utilisation totale de documents')
ax2.set_ylabel('Nombre d\'habitants')
# ajout de la grille
ax1.yaxis.grid(which='major', linestyle='-', linewidth=1, zorder=0)
# Format des milliers sur les axes y
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
ax2.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))
# limites des axes
ax1.set_xlim(left=-0.8, right=15.8)
ax1.set_ylim([0, 62000000])
ax2.set_ylim([0, 9600000])
# titre
ax1.set_title('Utilisation totale de documents physiques (G59, G62, G63 et G68) et électroniques (G71 et G72)', fontsize=13, pad=20)
# position des deux légendes
lgd1 = ax1.legend(loc=3, bbox_to_anchor=(0,-0.2), ncol=2)
lgd2 = ax2.legend(loc=3, bbox_to_anchor=(0,-0.25), ncol=2)
# sauvegarder le graphique
plt.savefig('figures/G59_62_63_68_71_72_all_3.png', bbox_extra_artists=(lgd1, lgd2), bbox_inches='tight', dpi=150)
plt.show()